﻿//===========================================================================================================================
// Cuberry - http://www.cuberry.net
// Copyright (c) 2012
// by Peacequare® - Amir Moussa
//===========================================================================================================================
// This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License 
// as published by the Free Software Foundation, either version 3 of the License, or any later version.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions 
// of the Software.
//
// This program is distributed in the hope that it will be useful.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
// DEALINGS IN THE SOFTWARE.
//
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//===========================================================================================================================

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using P2.Cuberry.Framework.Helper;


namespace P2.Cuberry.Modules.SimpleAccounting.HREmployee
{
    /// <summary>
    /// Interaction logic for HREmployeesDetailsView.xaml
    /// </summary>
    public partial class HREmployeesDetailsView : Window, IHREmployeesDetailsView
    {

        public HREmployeesDetailsView()
        {
            InitializeComponent();
        }


        public HREmployeesDetailsPresentationModel Model
        {
            get { return this.DataContext as HREmployeesDetailsPresentationModel; }
            set
            {                
                this.DataContext = value;
                //DDL++ sort
                this.CountryID.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("CountryNameCur", System.ComponentModel.ListSortDirection.Ascending));
                this.DepartmentID.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("DepartmentNameCur", System.ComponentModel.ListSortDirection.Ascending));
                this.TitleID.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("TitleNameCur", System.ComponentModel.ListSortDirection.Ascending));
                this.HRPayrollTemplateHeaderID.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("TemplateName", System.ComponentModel.ListSortDirection.Ascending));
            }
        }


        #region Standard DetailView Functionalities

        public void UpdateFocusedControl()
        {
            try
            {
                TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
                if (focusedTextBox == null)
                    return;
                
                BindingExpression textBindingExpr =
                  focusedTextBox.GetBindingExpression(TextBox.TextProperty);
                if (textBindingExpr == null)
                    return;

                textBindingExpr.UpdateSource();
            }
            catch (Exception)
            {
            }
        }


        private void SaveBtn_Click(object sender, RoutedEventArgs e)
        {
            UpdateFocusedControl();

            //if (Model.Save())
            //{
            //    this.DialogResult = true;
            //    this.Close();
            //}

            //P2MessageStack messageStack = Model.Save();
            //StatusStrip.addStatusBlock(Model.MessageStack);            
        }


        private void CloseBtn_Click(object sender, RoutedEventArgs e)
        {
            bool result = AskSave();
            if (result) this.Close();

        }
                     
        
        private void PrintBtn_Click(object sender, RoutedEventArgs e)
        {

        }


        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            e.Cancel = !this.AskSave();
        }
        

        public bool AskSave()
        {
            UpdateFocusedControl();
            if (!Model.IsReadOnly && Model.ModelIsModified)
            
            {
                MessageBoxOptions opt = MessageBoxOptions.None;
                if (this.FlowDirection == FlowDirection.RightToLeft) opt = MessageBoxOptions.RtlReading;
                MessageBoxResult result = MessageBox.Show(P2Translator.GetResource("hrEmployeeNotSaved"), P2Translator.GetResource("HREmployeeNotSavedCaption"), MessageBoxButton.YesNoCancel, MessageBoxImage.Exclamation, MessageBoxResult.Cancel, opt);
                switch (result)
                {
                    case MessageBoxResult.Cancel:
                        break;
                    case MessageBoxResult.No:
                        return true;

                    case MessageBoxResult.Yes:
                        Model.Save();
                        if (StatusStrip.Status == "green")
                            return true;
                        break;
                    default:
                        break;
                }
                return false;
            }
            else
            {
                return true;
            }
        }


        public bool YellowStatusWarning(string MessageText, string CaptionText)
        {
            MessageBoxOptions opt = MessageBoxOptions.None;
            if (this.FlowDirection == FlowDirection.RightToLeft) opt = MessageBoxOptions.RtlReading;
            MessageBoxResult result = MessageBox.Show(MessageText, CaptionText, MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.Cancel, opt);

            switch (result)
            {
                case MessageBoxResult.Cancel:
                    break;

                case MessageBoxResult.No:
                    return false;
                    
                case MessageBoxResult.Yes:
                    return true;
                    
                default:
                    break;
            }
            return false;
        }

        #endregion


    }
}

